home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the 3D Game Programming Gurus / gurus.iso / DirectX / dx9sdkcp.exe / SDK (C++) / Bin / DXUtils / Visual Studio 6.0 Wizards / DMToolWizard.awx / TEMPLATE / DLL.CPP < prev    next >
Encoding:
C/C++ Source or Header  |  2002-12-11  |  6.5 KB  |  264 lines

  1. //------------------------------------------------------------------------------
  2. // File: $$DLL_NAME$$.cpp
  3. //
  4. // Desc: DirectMusicTool Wizard generated code - Implementation of DLL Exports.
  5. //
  6. // Copyright (c) Microsoft Corporation.  All rights reserved.
  7. //------------------------------------------------------------------------------
  8.  
  9. #if _MSC_VER > 1000
  10. #pragma once
  11. #endif // _MSC_VER > 1000
  12.  
  13. #define STRICT
  14. #ifndef _WIN32_WINNT
  15. #define _WIN32_WINNT 0x0400
  16. #endif
  17.  
  18. #define _ATL_FREE_THREADED
  19. #define _ATL_STATIC_REGISTRY
  20.  
  21. #include <atlbase.h>
  22. //You may derive a class from CComModule and use it if you want to override
  23. //something, but do not change the name of _Module
  24. extern CComModule _Module;
  25. #include <atlcom.h>
  26. #include <atlctl.h>
  27. #include <statreg.h>
  28. #include <statreg.cpp>
  29. #include <atlimpl.cpp>
  30.  
  31. #include "resource.h"
  32. #include <initguid.h>
  33.  
  34. #include "$$CLASS_NAME$$.h"
  35. $$IF(SUPPORT_DM_DMP)
  36. #include "$$CLASS_NAME$$Prop.h"
  37. $$ENDIF
  38.  
  39. CComModule _Module;
  40.  
  41. BEGIN_OBJECT_MAP(ObjectMap)
  42. OBJECT_ENTRY(CLSID_$$TOOL_DEFINE$$, $$CLASS_NAME$$)
  43. $$IF(SUPPORT_DM_DMP)
  44. OBJECT_ENTRY(CLSID_$$TOOL_DEFINE$$PROP, $$CLASS_NAME$$Prop)
  45. $$ENDIF
  46. END_OBJECT_MAP()
  47.  
  48. #define CLSID_STRING_SIZE    39
  49. HRESULT CLSIDToStr(const CLSID &clsid, TCHAR *szStr, int cbStr)
  50. {
  51.     if(cbStr < CLSID_STRING_SIZE)
  52.     {
  53.         return E_INVALIDARG;
  54.     };
  55.     
  56.     LPOLESTR wszCLSID = NULL;
  57.     HRESULT hr = StringFromCLSID(clsid, &wszCLSID);
  58.     if (!SUCCEEDED(hr)) {
  59.         return hr;
  60.     }
  61.  
  62. #ifdef UNICODE
  63.     lstrcpy(szStr, wszCLSID);
  64. #else
  65.     // Covert from wide characters to non-wide.
  66.     wcstombs(szStr, wszCLSID, cbStr);
  67. #endif
  68.  
  69.     // Free memory.
  70.     CoTaskMemFree(wszCLSID);
  71.  
  72.     return S_OK;
  73. }
  74.  
  75. /////////////////////////////////////////////////////////////////////////////
  76. // Tool information for tool registration in the registry
  77.  
  78. // TODO: You may modify the fields to your preferred names and description
  79. TCHAR g_szToolFriendlyName[]            = TEXT("$$TOOL_NAME$$");
  80. TCHAR g_szToolShortName[]               = TEXT("$$DLL_NAME$$");
  81. TCHAR g_szToolDescription[]             = TEXT("$$TOOL_DESC$$");
  82. TCHAR g_szToolVerIndProgID[]            = TEXT("$$DLL_NAME$$");
  83. TCHAR g_szToolProgID[]                  = TEXT("$$DLL_NAME$$.1"); 
  84.  
  85. // Used for tool registration
  86. const TCHAR cszToolRegRoot[] = TEXT(DMUS_REGSTR_PATH_TOOLS) TEXT("\\");
  87. const TCHAR cszDescriptionKey[] = TEXT("Description");
  88. const TCHAR cszNameKey[] = TEXT("Name");
  89. const TCHAR cszShortNameKey[] = TEXT("ShortName");
  90.  
  91. HRESULT CLSIDToStr(const CLSID &clsid, TCHAR *szStr, int cbStr);
  92.  
  93. /////////////////////////////////////////////////////////////////////////////
  94. // RegisterTool - Adds tool entry to the system registry
  95.  
  96. HRESULT RegisterTool(REFGUID guid,
  97.                       const TCHAR szDescription[],
  98.                       const TCHAR szShortName[],
  99.                       const TCHAR szName[])
  100. {
  101.     HKEY hk;
  102.     TCHAR szCLSID[CLSID_STRING_SIZE];
  103.     TCHAR szRegKey[256];
  104.     
  105.     HRESULT hr = CLSIDToStr(guid, szCLSID, sizeof(szCLSID));
  106.     if (!SUCCEEDED(hr))
  107.     {
  108.         return hr;
  109.     }
  110.  
  111.     lstrcpy(szRegKey, cszToolRegRoot);
  112.     lstrcat(szRegKey, szCLSID);
  113.  
  114.     if (RegCreateKey(HKEY_LOCAL_MACHINE,
  115.                      szRegKey,
  116.                      &hk))
  117.     {
  118.         return E_FAIL;
  119.     }
  120.  
  121.     hr = S_OK;
  122.  
  123.     if (RegSetValueEx(hk,
  124.                   cszDescriptionKey,
  125.                   0L,
  126.                   REG_SZ,
  127.                   (CONST BYTE*)szDescription,
  128.                   lstrlen(szDescription) + 1))
  129.     {
  130.         hr = E_FAIL;
  131.     }
  132.  
  133.     if (RegSetValueEx(hk,
  134.                   cszNameKey,
  135.                   0L,
  136.                   REG_SZ,
  137.                   (CONST BYTE*)szName,
  138.                   lstrlen(szName) + 1))
  139.     {
  140.         hr = E_FAIL;
  141.     }
  142.  
  143.     if (RegSetValueEx(hk,
  144.                   cszShortNameKey,
  145.                   0L,
  146.                   REG_SZ,
  147.                   (CONST BYTE*)szShortName,
  148.                   lstrlen(szName) + 1))
  149.     {
  150.         hr = E_FAIL;
  151.     }
  152.  
  153.     RegCloseKey(hk);
  154.     return hr;
  155. }
  156.  
  157. /////////////////////////////////////////////////////////////////////////////
  158. // UnregisterTool - Removes tool entry from the system registry
  159.  
  160. HRESULT UnregisterTool(REFGUID guid)
  161. {
  162.     HKEY hk;
  163.     TCHAR szCLSID[CLSID_STRING_SIZE];
  164.     TCHAR szRegKey[256];
  165.     
  166.     HRESULT hr = CLSIDToStr(guid, szCLSID, sizeof(szCLSID));
  167.     if (!SUCCEEDED(hr))
  168.     {
  169.         return hr;
  170.     }
  171.  
  172.     lstrcpy(szRegKey, cszToolRegRoot);
  173.     lstrcat(szRegKey, szCLSID);
  174.  
  175.     if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,szRegKey,0,KEY_ALL_ACCESS | KEY_WRITE, &hk))
  176.     {
  177.         return E_FAIL;
  178.     }
  179.  
  180.     hr = S_OK;
  181.  
  182.     if (RegDeleteValue(hk,cszDescriptionKey))
  183.     {
  184.         hr = E_FAIL;
  185.     }
  186.  
  187.     if (RegDeleteValue(hk,cszNameKey))
  188.     {
  189.         hr = E_FAIL;
  190.     }
  191.  
  192.     if (RegDeleteValue(hk,cszShortNameKey))
  193.     {
  194.         hr = E_FAIL;
  195.     }
  196.  
  197.     RegCloseKey(hk);
  198.  
  199.     if (RegDeleteKey(HKEY_LOCAL_MACHINE,szRegKey))
  200.     {
  201.         hr = E_FAIL;
  202.     }
  203.  
  204.     return hr;
  205. }
  206.  
  207. /////////////////////////////////////////////////////////////////////////////
  208. // DLL Entry Point
  209.  
  210. extern "C"
  211. BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID /*lpReserved*/)
  212. {
  213.     if (dwReason == DLL_PROCESS_ATTACH)
  214.     {
  215.         _Module.Init(ObjectMap, hInstance);
  216.         DisableThreadLibraryCalls(hInstance);
  217.     }
  218.     else if (dwReason == DLL_PROCESS_DETACH)
  219.         _Module.Term();
  220.     return TRUE;    // ok
  221. }
  222.  
  223. /////////////////////////////////////////////////////////////////////////////
  224. // Used to determine whether the DLL can be unloaded by OLE
  225.  
  226. STDAPI DllCanUnloadNow(void)
  227. {
  228.     return (_Module.GetLockCount()==0) ? S_OK : S_FALSE;
  229. }
  230.  
  231. /////////////////////////////////////////////////////////////////////////////
  232. // Returns a class factory to create an object of the requested type
  233.  
  234. STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv)
  235. {
  236.     return _Module.GetClassObject(rclsid, riid, ppv);
  237. }
  238.  
  239. /////////////////////////////////////////////////////////////////////////////
  240. // DllRegisterServer - Adds entries to the system registry
  241.  
  242. STDAPI DllRegisterServer(void)
  243. {
  244.     RegisterTool(CLSID_$$TOOL_DEFINE$$,
  245.                  g_szToolDescription,
  246.                  g_szToolShortName,
  247.                  g_szToolFriendlyName);
  248.  
  249.     // registers object
  250.     return _Module.RegisterServer();
  251. }
  252.  
  253. /////////////////////////////////////////////////////////////////////////////
  254. // DllUnregisterServer - Removes entries from the system registry
  255.  
  256. STDAPI DllUnregisterServer(void)
  257. {
  258.     UnregisterTool(CLSID_$$TOOL_DEFINE$$);
  259.  
  260.     // unregisters object
  261.     return _Module.UnregisterServer();
  262. }
  263.  
  264.